﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Erau.ERBParser
{
    /// <summary>
    /// 스크립트에서 구현된 하나의 함수를 보관하고 있는 클래스.
    /// Emuera와는 달리 여기서는 함수의 시작부터 끝까지를 읽어서 이 클래스에 밀어넣은 후 내부에서 함수를 파싱하는 식으로 하자.
    /// 그쪽이 훨씬 구조적이고 파서 분석하기도 쉽다 -_-;
    /// </summary>
    public class ScriptFunction
    {
		public string Name;

		List<InstructionLine> instructions = new List<InstructionLine>();
		public List<InstructionLine> Instructions { get { return instructions; } }

		EraTable arg = new EraTable();
		public EraTable Arg { get { return arg; } }

		ScriptPosition pos;

		// 함수의 리턴값.
		public EraVar returnValue = null;

		public ScriptFunction(StringBuffer buf, ScriptPosition pos)
		{
			this.pos = pos;

			this.Parse(buf);

			ErauEngine.Instance.RegisterFunction(Name, this.Execute);
		}

		public void Parse(StringBuffer buf)
		{
			// 첫글자가 @맞는지 체크해서 아니면 에러처리.

			// 그 다음 글자부터 토큰이 함수명.

			// 그 뒤는 함수 인자목록인데, erb 스크립트의 함수 인자 규칙을 좀 봐야 할 듯.
		}

		public EraVar Execute(List<EraVar> args)
		{
			instructions[0].Execute();

			return returnValue;
		}
    }
}
